package com.mdb.open.epay.mapper.epay;

import com.mdb.bc.database.mybatisplus.SuperMapper;
import com.mdb.open.epay.domain.ko.CustDayOrderStatKo;
import com.mdb.open.epay.domain.ko.StatCustDayOrderKo;
import com.mdb.open.epay.domain.ko.StatUserDayOrderKo;
import com.mdb.open.epay.domain.ko.UserDayOrderStatKo;
import com.mdb.open.epay.domain.po.epay.QpOrder;
import com.mdb.open.epay.service.epay.biz.bo.TradeFailBizBo;
import com.mdb.open.epay.service.epay.biz.bo.TradeSuccessBizBo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;

/**
 * 类描述：
 * 快捷支付订单表 Mapper 接口
 *
 * @author liuyi
 * @date 2019-11-14
 */
public interface QpOrderMapper extends SuperMapper<QpOrder> {

    /**
     * 修改訂單狀態
     */
    int updateOrderStatus(@Param("innerOrderNo") String innerOrderNo, @Param("oldStatus") String oldStatus, @Param("newStatus") String newStatus);

    /**
     * 交易成功
     */
    int tradeSuccess(TradeSuccessBizBo bizBo);

    /**
     * 交易失败
     */
    int tradeFail(TradeFailBizBo bizBo);

    /**
     * 修改訂單狀態為超時
     */
    int updateOrderTimeout(@Param("innerOrderNo") String innerOrderNo,
                           @Param("oldStatus") String oldStatus,
                           @Param("newStatus") String newStatus,
                           @Param("errorCode") String errorCode,
                           @Param("errorMsg") String errorMsg);

    /**
     * 用户訂單統計
     */
    UserDayOrderStatKo countUserDayOrderInfo(StatUserDayOrderKo ko);

    /**
     * 客戶訂單統計
     */
    CustDayOrderStatKo countCustDayOrderInfo(StatCustDayOrderKo ko);

    /**
     * 退款成功操作
     * @param innerOrderNo 订单号
     * @param amount 退款金额
     * @param fee   退款费用金额
     */
    int refundSuccess(@Param("innerOrderNo") String innerOrderNo, @Param("amount") BigDecimal amount, @Param("fee") BigDecimal fee);

    /**
     * 退款失敗操作
     * @param innerOrderNo 訂單號
     * @param amount    退款金額
     * @param fee   退款費用金額
     */
    int refundFail(@Param("innerOrderNo") String innerOrderNo, @Param("amount") BigDecimal amount, @Param("fee") BigDecimal fee);

    /**
     * 退款
     * @param innerOrderNo 訂單號
     * @param amount 退款金額
     * @param fee   退款費用金額
     */
    int refund(@Param("innerOrderNo") String innerOrderNo, @Param("amount") BigDecimal amount, @Param("fee") BigDecimal fee);
}
